package com.jay.fault.tolerant;


import com.jay.spi.SpiLoader;

/**
 * 容错策略工厂（工厂模式，用于获取容错策略对象）
 * 该工厂类用于根据不同的需求提供相应的容错策略对象
 * 它使用了SPI（Service Provider Interface）加载机制来动态加载实现类
 */
public class TolerantStrategyFactory {

    // 静态代码块，用于在类加载时执行SPI加载
    static {
        SpiLoader.load(TolerantStrategy.class);
    }

    /**
     * 默认容错策略
     * 当没有指定具体的容错策略时，将使用该默认策略
     */
    private static final TolerantStrategy DEFAULT_RETRY_STRATEGY = new FailFastTolerantStrategy();

    /**
     * 获取实例
     * 根据提供的键值获取相应的容错策略实例
     *
     * @param key 容错策略的键值，用于识别特定的容错策略
     * @return 返回对应的容错策略实例
     */
    public static TolerantStrategy getInstance(String key) {
        return SpiLoader.getInstance(TolerantStrategy.class, key);
    }

}
